Complex Type এবং Value Object দুটি গুরুত্বপূর্ণ ধারণা যা সিস্টেম ডিজাইন এবং ডোমেইন ড্রিভেন ডিজাইন (DDD) এ ব্যাপকভাবে ব্যবহৃত হয়। এগুলি মূলত ডোমেইন মডেল এবং সফটওয়্যার স্থাপত্যের একটি অংশ যা ডেটা মডেলিং এবং ডেটার প্রোগ্রাম্যাটিক ব্যবহারের জন্য ব্যবহৃত হয়। এই দুটি ধারণা সাধারণত ডোমেইন অবজেক্টের মধ্যে সম্পর্ক এবং আচরণের জন্য ব্যবহৃত হয়।
Complex Type হল এমন একটি ডেটা টাইপ যা একাধিক প্রপার্টি বা ফিল্ড ধারণ করে কিন্তু এটি নিজে কোনো আইডেন্টিটি বা ইউনিক কীগুলি রাখে না। এটি সাধারণত একটি ডেটা ভ্যালু হিসেবে ব্যবহৃত হয় এবং এতে এক বা একাধিক প্রপার্টি থাকতে পারে। Complex Type সাধারণত একটি প্যাটার্ন হিসেবে ব্যবহৃত হয় যা বিভিন্ন ধরনের ডেটার গ্রুপকে প্রতিনিধিত্ব করে।
ধরা যাক, একটি Address (ঠিকানা) যে কোনো Customer (গ্রাহক) এর সাথে যুক্ত হতে পারে। এখানে Address এর মধ্যে Street
, City
, ZipCode
ইত্যাদি প্রপার্টি থাকতে পারে। এই ধরনের একটি Address এর নিজস্ব কোনো ইউনিক আইডেন্টিটি নেই, বরং এটি শুধু গ্রাহকের ঠিকানা হিসেবে ব্যবহার করা হয়।
C# এ Complex Type এর উদাহরণ:
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
}
এখানে, Address
একটি Complex Type, কারণ এটি একাধিক প্রপার্টি ধারণ করে কিন্তু এর নিজস্ব কোনো আইডেন্টিটি নেই। আপনি একাধিক Address
অবজেক্ট একই ক্লাসের মধ্যে ব্যবহার করতে পারেন।
Value Object হল এমন একটি অবজেক্ট যার কোনো ইউনিক আইডেন্টিটি নেই এবং এর সমস্ত প্রপার্টি এর মানের উপর নির্ভর করে। Value Object-গুলো সাধারণত এমন ডোমেইন মডেল অবজেক্ট যা একাধিক ক্ষেত্র (ফিল্ড) ধারণ করে কিন্তু তারা কোনো আইডেন্টিটি বা দীর্ঘমেয়াদী সত্তা (entity) ধারণ করে না। Value Object এর একটি বিশেষ বৈশিষ্ট্য হল যে, এর মান পরিবর্তনযোগ্য নয়, অর্থাৎ এটি immutable। যখন কোনো Value Object পরিবর্তিত হয়, তখন একটি নতুন ইনস্ট্যান্স তৈরি হয়, পুরানোটি পরিবর্তিত হয় না।
ধরা যাক, একটি Money অবজেক্ট, যেটি দুইটি প্রপার্টি ধারণ করে: Amount
এবং Currency
। এটি শুধু একটি মান প্রতিনিধিত্ব করে, কোনো দীর্ঘমেয়াদী আইডেন্টিটি বা অবস্থান নেই। আপনি যখন দুটি Money
অবজেক্ট তুলনা করবেন, আপনি তাদের মান (amount এবং currency) দিয়েই তুলনা করবেন, তাদের কোনো আইডেন্টিটি নয়।
C# এ Value Object এর উদাহরণ:
public class Money
{
public decimal Amount { get; private set; }
public string Currency { get; private set; }
public Money(decimal amount, string currency)
{
Amount = amount;
Currency = currency;
}
public override bool Equals(object obj)
{
var other = obj as Money;
return other != null &&
Amount == other.Amount &&
Currency == other.Currency;
}
public override int GetHashCode()
{
return (Amount, Currency).GetHashCode();
}
}
এখানে Money
একটি Value Object, কারণ এটি নিজের মধ্যে একটি মান (amount এবং currency) ধারণ করে, এবং এটি immutable (অপরিবর্তনীয়)। যদি Money
এর মান পরিবর্তন করতে হয়, তাহলে একটি নতুন অবজেক্ট তৈরি করতে হবে, পুরানোটি পরিবর্তিত হবে না।
Complex Type এবং Value Object উভয়ই ডেটা মডেলিংয়ের ক্ষেত্রে গুরুত্বপূর্ণ কনসেপ্ট। Complex Type একাধিক প্রপার্টি ধারণ করে এবং ডোমেইন অবজেক্টের একটি অংশ হিসেবে ব্যবহৃত হয়, তবে এর নিজস্ব কোনো ইউনিক আইডেন্টিটি থাকে না। অন্যদিকে, Value Object ডোমেইন মডেলের এমন অবজেক্ট যা শুধুমাত্র তার মানের উপর ভিত্তি করে সমান বা ভিন্ন হয় এবং এটি কখনো পরিবর্তিত হয় না (immutable)। এগুলির ব্যবহার ডোমেইন মডেলকে পরিষ্কার, এক্সপ্রেসিভ, এবং কার্যকরী করে তোলে।
common.read_more